// // 、已知两个链表 A 和 B 分别表示两个集合，其元素递增排列。
// // 请设计两个算法求出两个集合 A 和 B 的差集（即仅由在 A 中出现而不在 B 中出现的元素所构成的集合），
// // 并且以同样的形式存储，同时返回该集合的元素个数。
// #include <stdio.h>
// #include <stdlib.h>
// #include "windows.h"
// //节点结构
// typedef struct LinkNode {
//     int data;
//     struct LinkNode* next;
// }LinkNode;
// //链表结构
// typedef struct LinkList {
//     LinkNode* head;
// }LinkList;
// //链表初始化
// LinkList* LinkInit() {
//     LinkList* list=(LinkList*)malloc(sizeof(LinkList));
//     list->head=(LinkNode*)malloc(sizeof(LinkNode));
//     list->head->next=NULL;
//     return list;
// }
//
// // 插入节点到链表尾部
// void LinkInsert(LinkList* list,int data) {
//     LinkNode* newNode=(LinkNode*)malloc(sizeof(LinkNode));
//     if(newNode==NULL) {
//         perror("malloc");
//     }
//     newNode->data=data;
//     newNode->next=NULL;
//     LinkNode* current=list->head;
//     while (current->next!=NULL) {
//         current=current->next;
//     }
//     current->next=newNode;
// }
// //头插法
// void LinkHeadInsert(LinkList* list,int data) {
//     LinkNode* newNode=malloc(sizeof(LinkNode));
//     if(newNode==NULL) {
//         perror("malloc");
//     }
//     newNode->data=data;
//     newNode->next=list->head->next;
//     list->head->next=newNode;
// }
// //打印链表
// void printLinkList(LinkList* list) {
//     LinkNode* current=list->head->next;
//     while(current!=NULL) {
//         printf("%d ",current->data);
//         current=current->next;
//     }
//     printf("\n");
// }
//
// void test(LinkList* LA,LinkList* LB) {
//     LinkNode* la=LA->head->next;
//     LinkNode* lb=LB->head->next;
//     LinkNode* prev=LA->head;
//     while (la!=NULL&&lb!=NULL) {
//         if(la->data==lb->data) {
//             LinkNode* tmp=la;
//             la=la->next;
//             prev->next=la;
//             free(tmp);
//             lb=lb->next;
//         }else if(la->data<lb->data) {
//             prev=la;
//             la=la->next;
//         }else {
//             lb=lb->next;
//         }
//     }
//
// }
// int count(LinkList* LA) {
//     LinkNode* current=LA->head->next;
//     int _count=0;
//     while (current!=NULL) {
//         _count++;
//         current=current->next;
//     }
//     return _count;
// }
// int main() {
//     SetConsoleOutputCP(CP_UTF8);
//     LinkList* LA = LinkInit();
//     LinkList* LB = LinkInit();
//
//     // 插入数据到链表LA
//     LinkInsert(LA, 1);
//     LinkInsert(LA, 3);
//     LinkInsert(LA, 5);
//     LinkInsert(LA, 7);
//     LinkInsert(LA, 9);
//
//     // 插入数据到链表LB
//     LinkInsert(LB, 2);
//     LinkInsert(LB, 3);
//     LinkInsert(LB, 5);
//     LinkInsert(LB, 8);
//
//     printf("链表LA: ");
//     printLinkList(LA);
//     printf("链表LB: ");
//     printLinkList(LB);
//
//     // 求差集
//     test(LA, LB);
//
//     printf("差集结果（存放在链表LA中）: ");
//     printLinkList(LA);
//
//     // 计算差集的元素个数
//     int count1 = count(LA);
//     printf("差集的元素个数: %d\n", count1);
//
//     // 释放链表内存
//     LinkNode* current = LA->head;
//     while (current != NULL) {
//         LinkNode* next = current->next;
//         free(current);
//         current = next;
//     }
//     free(LA);
//
//     current = LB->head;
//     while (current != NULL) {
//         LinkNode* next = current->next;
//         free(current);
//         current = next;
//     }
//     free(LB);
//     return 0;
// }